﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using PanasonicWarranty.Business;
using System.Web.UI.HtmlControls;
using Utils;
using System.IO;
using Settings;
using System.Data;
namespace PanasonicWarranty.UI
{
    public partial class RegisterWarranty : BasePage
    {
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            pagingtop.PagingChange += new EventHandler(paging_PagingChange);
            pagingbottom.PagingChange += new EventHandler(paging_PagingChange);
        }

        void paging_PagingChange(object sender, EventArgs e)
        {
            pagingtop.PagingChange -= new EventHandler(paging_PagingChange);
            pagingbottom.PagingChange -= new EventHandler(paging_PagingChange);
            pagingtop.CurrentPage = (sender as UserControl.ucPaging).CurrentPage;
            pagingbottom.CurrentPage = (sender as UserControl.ucPaging).CurrentPage;
            BindGridData();
            pagingtop.Visible = pagingbottom.Visible = (sender as UserControl.ucPaging).TotalPage > 1;
            pagingtop.PagingChange += new EventHandler(paging_PagingChange);
            pagingbottom.PagingChange += new EventHandler(paging_PagingChange);
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                PageSize = Convert.ToInt32(tSortable_length.SelectedValue);
                pagingtop.CurrentPage = pagingbottom.CurrentPage = 1;
                pagingtop.PageSize = pagingbottom.PageSize = PageSize;
                pagingtop.PageDisplay = pagingbottom.PageDisplay = 6;
                BindDropDownData();
                BindGridData();
                pa_Agency agency = pa_Agency.GetByID(CurUser.AgencyID.Value);
                if (agency != null)
                {
                    if (agency.FullControl == true)
                    {
                        pnlDKBH.Visible = true;
                    }
                    else
                    {
                        pnlDKBH.Visible = false;
                    }
                }
            }
        }

        private void BindGridData()
        {
            try
            {
                if (CurUser.AgencyID == null)
                    throw new Exception("Người dùng này phải thuộc đại một đại lý");
                string modelcode = txtSearchModelCode.Text.Trim();
                string productcode = txtSearchProductCode.Text.Trim();
                string phone = txtSearchPhone.Text;
                DateTime? fromDate = null;
                DateTime? toDate = null;
                if (!string.IsNullOrWhiteSpace(txtSearchFromDate.Text))
                    fromDate = Convert.ToDateTime(txtSearchFromDate.Text, DateTimeFormat);
                if (!string.IsNullOrWhiteSpace(txtSearchToDate.Text))
                    toDate = Convert.ToDateTime(txtSearchToDate.Text, DateTimeFormat);
                string warrantyType = ddlSearchWarrantyType.SelectedValue;
                bool? isValid = null;
                bool? approved = null;
                if (!string.IsNullOrEmpty(ddlSearchIsValid.SelectedValue))
                    isValid = Convert.ToBoolean(ddlSearchIsValid.SelectedValue);
                if (!string.IsNullOrEmpty(ddlSearchApproved.SelectedValue))
                    approved = Convert.ToBoolean(ddlSearchApproved.SelectedValue);
                int currentPage = pagingtop.CurrentPage;
                int pageSize = pagingtop.PageSize;
                int totalRow = 0;
                grvData.DataSource = pa_WarrantyWaiting.Paging(currentPage, pageSize, ref totalRow, CurUser.AgencyID.Value, modelcode, productcode, phone, fromDate, toDate, warrantyType, isValid, approved);
                pagingtop.TotalRecord = pagingbottom.TotalRecord = totalRow;
                pagingtop.Visible = pagingbottom.Visible = pagingtop.TotalPage > 1;
                grvData.DataBind();
                ltrInfo.Text = "Tổng cộng: " + totalRow;
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }

        private void BindDropDownData()
        {
            BindDropDownListData(ddlWarrantyPackage, pa_WarrantyPackage.GetAll(), "WarrantyPackageCode", "WarrantyPackageName", new ListItem("", ""));
        }

        protected void btnSearch_Click(object sender, EventArgs e)
        {
            pagingtop.PagingChange -= new EventHandler(paging_PagingChange);
            pagingbottom.PagingChange -= new EventHandler(paging_PagingChange);
            pagingtop.CurrentPage = pagingbottom.CurrentPage = 1;
            pagingtop.PagingChange += new EventHandler(paging_PagingChange);
            pagingbottom.PagingChange += new EventHandler(paging_PagingChange);
            BindGridData();
        }

        protected void tSortable_length_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                PageSize = Convert.ToInt32(tSortable_length.SelectedValue);
                pagingtop.PageSize = pagingbottom.PageSize = PageSize;
                BindGridData();
            }
            catch { }
        }

        protected void grvData_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                int ID = Convert.ToInt32(e.CommandArgument);
                hdfID.Value = ID.ToString();
                switch (e.CommandName)
                {    
                    case "Approving":
                        Authorize(Role.Approve);
                        pa_WarrantyWaiting.SetApproved(ID);
                        //Ghi log dữ liệu
                        InsertChangeLog("Duyệt dữ liệu đăng ký bảo hành");
                        break;
                }
                BindGridData();
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }

        protected void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                Authorize(Role.Write);
                if (ValidateInfo())
                {
                    using (var DB = new DBWarrantyDataContext(AppSetting.ConnectionString))
                    {
                        pa_WarrantyWaiting obj;
                        if (hdfAction.Value == "Editing")
                            obj = DB.pa_WarrantyWaitings.FirstOrDefault(p => p.WarrantyWattingID == int.Parse(hdfID.Value));
                        else
                        {
                            obj = new pa_WarrantyWaiting();
                            obj.RegisteredFrom = eRegisteredFrom.WEB;
                        }
                        if (obj != null)
                        {
                            //Gán thuộc tính
                            obj.CustomerPhone = txtPhone.Text.ToNormalPhoneNumber();
                            obj.ModelCode = txtModelCode.Text.Trim().ToUpper();
                            obj.ProductCode = txtProductCode.Text.ToUpper();
                            obj.RegisterDate = Convert.ToDateTime(txtRegisterDate.Text, DateTimeFormat);
                            obj.WarrantyType = ddlWarrantyType.SelectedValue;
                            if (obj.WarrantyType == eWarrantyType.GH)
                                obj.WarrantyPackageCode = ddlWarrantyPackage.SelectedValue == "" ? null : ddlWarrantyPackage.SelectedValue;
                            else
                                obj.WarrantyPackageCode = null;
                            obj.AgencyID = CurUser.AgencyID.Value;
                            obj.Approved = false;
                            obj.IsValid = true;
                            obj.Description = "";
                            if (hdfAction.Value == "AddNew")
                            {
                                obj.CreatedDate = DateTime.Now;
                                DB.pa_WarrantyWaitings.InsertOnSubmit(obj);
                            }
                            else
                                obj.ModifiedDate = DateTime.Now;
                            //save
                            DB.SubmitChanges();
                            //Ghi log tương tác
                            InsertChangeLog(hdfAction.Value == "Editing" ? "Cập nhật dữ liệu đăng ký bảo hành" : "Thêm mới dữ liệu đăng ký bảo hành");
                        }
                    }
                }
                BindGridData();
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }

        protected override bool ValidateInfo()
        {
            string errMsg = string.Empty;
            if (ddlWarrantyType.SelectedValue == eWarrantyType.GH)
            {
                if (ddlWarrantyPackage.SelectedValue == "")
                    errMsg = "Bắt buộc chọn gói gia hạn bảo hành";
            }
            if (string.IsNullOrEmpty(txtRegisterDate.Text))
                errMsg = "Bắt buộc nhập ngày đăng ký";
            else if (string.IsNullOrWhiteSpace(txtProductCode.Text))
                errMsg = "Bắt buộc nhập Số máy";
            if (string.IsNullOrWhiteSpace(txtModelCode.Text))
                errMsg = "Bắt buộc nhập model";
            if(!pa_Model.CheckExists(txtModelCode.Text.Trim()))
                errMsg = "Model được nhập không tồn tại trong hệ thống";
            if (string.IsNullOrEmpty(txtPhone.Text))
                errMsg = "Bắt buộc nhập số điện thoại";
            if (!OperatorPrefixCode.ValidatePhoneNumber(txtPhone.Text.ToNormalPhoneNumber()))
                errMsg = "Số điện thoại không hợp lệ";
            if (errMsg != string.Empty)
            {
                lbError.Text = errMsg;
                RegisterStartUpScript("OpenDialog('dialog1',335);");
                return false;
            }
            else
            {
                lbError.Text = string.Empty;
                return true;
            }
        }

        protected void btnDownload_Click(object sender, EventArgs e)
        {
            try
            {
                Authorize(Role.Download);
                pa_Agency agency = pa_Agency.GetByID(CurUser.AgencyID.Value);
                if (agency != null)
                {
                    if (agency.FullControl == true)
                    {
                        DownloadFile_Tracking(Server.MapPath(string.Format(@"~/App_Data/{0}", AppSetting.PatternFileUploadRegisterWarranty1)));
                    }
                    else
                    {
                        DownloadFile_Tracking(Server.MapPath(string.Format(@"~/App_Data/{0}", AppSetting.PatternFileUploadRegisterWarranty2)));
                    }
                    InsertChangeLog("Download mẫu file upload sản phẩm đăng ký bảo hành");
                }
            }
            catch (Exception ex)
            {
                ShowMessageBox(ex.Message);
            }
        }

        protected void lbtnApprovedAll_Click(object sender, EventArgs e)
        {
            try
            {
                Authorize(Role.Approve);
                foreach (GridViewRow row in grvData.Rows)
                {
                    CheckBox chk = (CheckBox)row.FindControl("chkCheckItem");
                    if (chk != null && chk.Visible && chk.Checked)
                    {
                        pa_WarrantyWaiting.SetApproved(int.Parse(((HiddenField)row.FindControl("hdfItemID")).Value));
                    }
                }
                InsertChangeLog("Duyệt toàn bộ dữ liệu đăng ký bảo hành được chọn");
                BindGridData();
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }

        protected void lbtnDeleteAll_Click(object sender, EventArgs e)
        {
            try
            {
                Authorize(Role.Write);
                pa_WarrantyWaiting.DeleteAllNotValidateData(CurUser.AgencyID.Value);
                BindGridData();
                InsertChangeLog("Xóa toàn bộ dữ liệu lỗi!");
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }

        protected void lbtnExportAll_Click(object sender, EventArgs e)
        {
            try
            {
                Authorize(Role.Export);
                using (DataTable dt = pa_WarrantyWaiting.GetAll(CurUser.AgencyID.Value))
                {
                    if (dt == null || dt.Rows.Count == 0)
                        ShowMessageBox("Không có dữ liệu export");
                    else if (dt.Rows.Count > 0)
                    {
                        foreach (DataColumn col in dt.Columns)
                            col.Caption = pa_WarrantyWaiting.GetCaption(col.ColumnName);
                        ExportToExcel(dt, "ExportThongTinDuLieuDangKyBaoHanhDaily.xlsx");
                    }
                }
                InsertChangeLog("Export dữ liệu thông tin đăng ký bảo hành của đại lý");
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }

        protected void btnCancel_Click(object sender, EventArgs e)
        {
            BindGridData();
        }

        [WebMethod]
        public static pa_WarrantyWaiting GetWarrantyWaiting(int id)
        {
            return pa_WarrantyWaiting.GetByID(id);
        }

        [WebMethod]
        public static void DeleteWarrantyWaiting(int id)
        {
            pa_WarrantyWaiting.DeleteByID(id);
            SInsertChangeLog("Xóa dữ liệu đăng ký bảo hành");
        }
    }
}